package com.eye.catcher.service.generate.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.eye.catcher.entity.TSysDaModule;
import com.eye.catcher.service.generate.ITSysDaModuleService;
import com.eye.catcher.utils.RandomIdUtils;
import com.eye.catcher.constants.SbCode;
import com.eye.catcher.entity.TSysDaRoleModule;
import com.eye.catcher.mapper.TSysDaRoleModuleMapper;
import com.eye.catcher.service.generate.ITSysDaRoleModuleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.eye.catcher.system.roleModule.param.RoleModulePage;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author huzhiwei
 * @since 2022-02-08
 */
@Slf4j
@Service
public class TSysDaRoleModuleServiceImpl extends ServiceImpl<TSysDaRoleModuleMapper, TSysDaRoleModule> implements ITSysDaRoleModuleService {

    @Autowired
    private ITSysDaModuleService moduleService;

    @Override
    public void addRoleModule(TSysDaRoleModule roleModule) {
        roleModule.setId(RandomIdUtils.getGuid());
        roleModule.setLastTime(LocalDateTime.now());
        roleModule.setSource(SbCode.DATA_SOURCE_CREATE.getCode());
        this.save(roleModule);
    }

    @Override
    public void deleteRoleModuleByIds(String roleModuleIds) {
        this.removeByIds(Arrays.asList(roleModuleIds.split(",")));
    }

    @Override
    public void deleteRoleModuleByModuleIds(String moduleIds) {
        QueryWrapper<TSysDaRoleModule> wrapper = Wrappers.query();
        wrapper.in("MODULE_ID",Arrays.asList(moduleIds.split(",")));
        this.remove(wrapper);
    }

    @Override
    public void deleteRoleModuleByRoleIds(String roleIds) {
        QueryWrapper<TSysDaRoleModule> wrapper = Wrappers.query();
        wrapper.in("ROLE_ID",Arrays.asList(roleIds.split(",")));
        this.remove(wrapper);
    }

    @Override
    public Object getPageRoleModuleList(RoleModulePage roleModulePage) {
        Page<TSysDaRoleModule> page=new Page<>(roleModulePage.getPage().getPageNum(),roleModulePage.getPage().getPageSize());
        QueryWrapper<TSysDaRoleModule> wrapper = Wrappers.query();
        //组装查询条件
        if(StringUtils.isNotEmpty(roleModulePage.getRoleModule().getModuleId())){
            wrapper.eq("MODULE_ID",roleModulePage.getRoleModule().getModuleId());
        }
        if(StringUtils.isNotEmpty(roleModulePage.getRoleModule().getRoleId())){
            wrapper.eq("ROLE_ID",roleModulePage.getRoleModule().getRoleId());
        }

        wrapper.orderByDesc(" LAST_TIME ");
        //list
        IPage<TSysDaRoleModule> returnPage = this.page(page, wrapper);
        //总数
        returnPage.setTotal(this.count(wrapper));
        return returnPage;
    }

    @Override
    public void addBatchRoleModule(TSysDaRoleModule roleModule) {
        if(SbCode.DATA_DELETE_AFTER_ADD.getCode().equals(roleModule.getType())){
            //先删除
            if(StringUtils.isNotEmpty(roleModule.getRoleId())){
                QueryWrapper<TSysDaRoleModule> wrapper = Wrappers.query();
                wrapper.in("ROLE_ID",Arrays.asList(roleModule.getRoleId().split(",")));
                this.remove(wrapper);
            }
        }
        TSysDaRoleModule roleModule1 = null;
        List<TSysDaRoleModule> saveBatchList = new ArrayList<>();
        for(String moduleId:roleModule.getModuleIds().split(",")){
            roleModule1 = new TSysDaRoleModule();
            roleModule1.setId(RandomIdUtils.getGuid());
            roleModule1.setRoleId(roleModule.getRoleId());
            roleModule1.setModuleId(moduleId);
            roleModule1.setLastTime(LocalDateTime.now());
            roleModule1.setVersion("1");
//            this.save(roleModule1);
            saveBatchList.add(roleModule1);
        }
//        // 前端 不会改 ，赋权一下 上级，直接写死 向上 保存 两级
//        Set<String> stringSet = new HashSet<>();
//        //1、查询当前选择模块
//        QueryWrapper<TSysDaModule> moduleQueryWrapper = Wrappers.query();
//        moduleQueryWrapper.in("ID",Arrays.asList(roleModule.getModuleIds().split(",")));
//        List<TSysDaModule> moduleList = this.moduleService.list(moduleQueryWrapper);
//        stringSet.addAll(moduleList.stream().map(TSysDaModule::getParentId).collect(Collectors.toList()));
//        //2、查询 上级 菜单
//        moduleQueryWrapper = Wrappers.query();
//        moduleQueryWrapper.in("ID",stringSet);
//        moduleList = this.moduleService.list(moduleQueryWrapper);
//        stringSet.addAll(moduleList.stream().map(TSysDaModule::getParentId).collect(Collectors.toList()));
//        //3、查询 上级 子系统
//        moduleQueryWrapper = Wrappers.query();
//        moduleQueryWrapper.in("ID",stringSet);
//        moduleList = this.moduleService.list(moduleQueryWrapper);
//        for(TSysDaModule module:moduleList){
//            roleModule1 = new TSysDaRoleModule();
//            roleModule1.setId(RandomIdUtils.getGuid());
//            roleModule1.setRoleId(roleModule.getRoleId());
//            roleModule1.setModuleId(module.getId());
//            roleModule1.setLastTime(LocalDateTime.now());
//            roleModule1.setVersion("1");
//            saveBatchList.add(roleModule1);
//        }
        this.saveBatch(saveBatchList);
    }
}
